#include <iostream>

using namespace std;

//静态成员变量
//静态成员变量属于类，不属于某个对象
//静态成员变量在类中只有一份，所有对象共享
//静态成员变量必须在类外定义和初始化
//静态成员变量可以通过对象访问，也可以通过类名访问
//作用：静态成员变量可以在类外定义和初始化，这样就可以在类外访问静态成员变量，而不需要创建对象

//静态成员函数
//静态成员函数属于类，不属于某个对象
//静态成员函数只能访问静态成员变量和静态成员函数
//静态成员函数可以在类外定义和初始化
//静态成员函数可以通过对象访问，也可以通过类名访问
//静态成员函数没有this指针
//作用：静态成员函数可以在类外定义和初始化，这样就可以在类外访问静态成员函数，而不需要创建对象


class a
{
public:
    int x;
    static int y;//静态变量定义，本质上是声明一个已存在的全局变量到该类里面，就是让类明白这个全局变量现在属于它了
    static int c;
    a()
    {
        c++;
    }

    static void hello()//全局函数被挂名在a名下
    {
        cout<<"hello"<<y<<endl;
    }
};

int a::y;//定义一个属于a的全局变量
int a::c = 0;


int main()
{
    a a1;
    a a2;
    a1.hello();
    a::hello();

    a * p = new a;

    cout<<"a有"<<a::c<<"个变量"<<endl;

//    a::y = 1000;
//    a a1;
//    a1.y = 100;
//    cout<<a::y<<endl;

    return 0;
}
